package com.velpro.im.service;

import java.util.List;

public interface BaseService <T> {
	
	/**
	 * 根据主键字段进行查询，方法参数必须包含完整的主键属性，查询条件使用等号
	 * @param key
	 * @return
	 */
	T selectByPrimaryKey(Object key);
	
	/**
	 * 根据主键字段查询总数，方法参数必须包含完整的主键属性，查询条件使用等号
	 * @param key
	 * @return
	 */
	boolean existsWithPrimaryKey(Object key);
	
	/**
	 * 查询全部结果
	 * @return
	 */
	List<T> selectAll();
	
	/**
	 * 根据实体中的属性值进行查询，查询条件使用等号
	 * @param record
	 * @return
	 */
	List<T> select(T record);
	
	/**
	 * 根据实体中的属性进行查询，只能有一个返回值，有多个结果是抛出异常，查询条件使用等号
	 * @param record
	 * @return
	 */
	T selectOne(T record);
	
	/**
	 * 根据实体中的属性查询总数，查询条件使用等号
	 * @param record
	 * @return
	 */
	int selectCount(T record);
	
	 /**
     * 根据主键字符串进行查询，类中只有存在一个带有@Id注解的字段
     *
     * @param ids 如 "1,2,3,4"
     * @return
     */
	List<T> selectByIds(String ids);
	
	/**
	 * 保存一个实体，null的属性也会保存，不会使用数据库默认值
	 * @param record
	 * @return
	 */
	//int insert(T record);
	
	/**
	 * 保存一个实体，null的属性不会保存，会使用数据库默认值
	 * @param record
	 * @return
	 */
	//int insertSelective(T record);
	
	/**
	 * 根据主键更新实体全部字段，null值会被更新
	 * @param record
	 * @return
	 */
	//int updateByPrimaryKey(T record);
	
	/**
	 * 根据主键更新属性不为null的值
	 * @param record
	 * @return
	 */
	//int updateByPrimaryKeySelective(T record);
	
	/**
	 * 根据实体属性作为条件进行删除，查询条件使用等号
	 * @param record
	 * @return
	 */
	//int delete(T record);
	
	/**
	 * 根据主键字段进行删除，方法参数必须包含完整的主键属性
	 * @param key
	 * @return
	 */
	//int deleteByPrimaryKey(Object key);
}
